package br.com.toscano.contpedido.view.converter;

import java.util.regex.Pattern;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;

@FacesConverter(value = "cpfCnpjConverter")
public class CpfCnpjConverter implements Converter {

	public Object getAsObject(FacesContext context, UIComponent component,
			String value) throws ConverterException {
		/*
		 * Irá converter CPF/CNPJ formatado para um sem pontos e traço. 
		 * Ex.: 355.245.198-87 torna-se 35524519887 
		 * Ex.: 11.111.111/0001-11 torna-se 11111111000111
		 */
		String cpfCnpj = value;

		String resultado = "";
		for (int i = 1; i <= cpfCnpj.length(); i++) {
			if (!Pattern.matches("([^0-9])+", cpfCnpj.substring(i - 1, i))) {
				resultado += cpfCnpj.substring(i - 1, i);
			}
		}
		
		return resultado;
	}

	public String getAsString(FacesContext context, UIComponent component,
			Object value) throws ConverterException {
		
		if(value == null || "".equals(String.valueOf(value))) {
			return "";
		}
		
		/*
		 * Irá converter CPF/CNPJ não formatado para um com pontos e traço. 
		 * Ex.: 35524519887 torna-se 355.245.198-87
		 * Ex.: 11111111000111 torna-se 11.111.111/0001-11 
		 */
		String cpfCnpj = String.valueOf(value);

		if (cpfCnpj != null && cpfCnpj.length() == 14) {

			 String cpf = cpfCnpj;  
	          
	        String bloco1 = cpf.substring(0, 2);  
	        String bloco2 = cpf.substring(2, 5);  
	        String bloco3 = cpf.substring(5, 8);  
	        String bloco4 = cpf.substring(8, 12);  
	        String bloco5 = cpf.substring(12, 14);  
	          
	        cpfCnpj = bloco1+"."+bloco2+"."+bloco3+"/"+bloco4+"-"+bloco5; 

	        //			cpfCnpj = org.alfredlibrary.formatadores.CNPJ.formatar(StringUtils
//					.leftPad(String.valueOf(cpfCnpj), 14, '0'));
		} else 		if (cpfCnpj != null && cpfCnpj.length() == 11) {

			 String cpf = cpfCnpj;  
	          
	        String bloco1 = cpf.substring(0, 3);  
	        String bloco2 = cpf.substring(3, 6);  
	        String bloco3 = cpf.substring(6, 9);  
	        String bloco4 = cpf.substring(9, 11);  
	          
	        cpfCnpj = bloco1+"."+bloco2+"."+bloco3+"-"+bloco4; 
//			        
//
//		        cpfCnpj = org.alfredlibrary.formatadores.CPF.formatar(StringUtils
//					.leftPad(String.valueOf(cpfCnpj), 11, '0'));
		}

		return cpfCnpj;
	}
}